package com.hucsmn.phone;

/**
 * 通话套餐类。
 */
public class CallPlan extends Plan implements CallService {
    /**
     * 通话时长。
     */
    private double duration;

    /**
     * 短信条数。
     */
    private int message;

    /**
     * 每月资费。
     */
    private double cost;

    public CallPlan() {
    }

    public CallPlan(double duration, int message, double cost) {
        super(cost);
        setDuration(duration);
        setMessage(message);
    }

    /**
     * 显示所有套餐信息。
     */
    @Override
    public void show() {
        System.out.println("上网流量 " + duration + "、短信条数 " + message + "、每月资费 " + cost);
    }

    /**
     * 实现通话服务，累加通话时长。
     *
     * @param duration 本次通话时长。
     * @param card     手机卡。
     */
    @Override
    public void accumulateDuration(double duration, Card card) {
        if (!Double.isFinite(duration) || duration < 0.0) {
            throw new IllegalArgumentException();
        }

        // 暂时不考虑计费问题。
        card.setDuration(card.getDuration() + duration);
    }

    public double getDuration() {
        return duration;
    }

    public void setDuration(double duration) {
        if (!Double.isFinite(duration) || duration < 0.0) {
            throw new IllegalArgumentException();
        }
        this.duration = duration;
    }

    public int getMessage() {
        return message;
    }

    public void setMessage(int message) {
        if (message < 0) {
            throw new IllegalArgumentException();
        }
        this.message = message;
    }
}
